﻿using System;
using System.Windows;
using System.Windows.Controls;
using Contratos.Aseguradora;
using MJD.Comunes.DtoEntidades;
using Presentadores.Aseguradoras;

namespace MJD.Empresas
{
    /// <summary>
    /// Code behind de la vista de agregar sucursal
    /// </summary>
    public partial class AgregarSucursal : ChildWindow,IAgregarSucursal
    {

        #region Atributos

        /// <summary>
        /// evento cuando se da click al boton de aceptar
        /// </summary>
        public event EventHandler AceptarClicked;

        /// <summary>
        /// Datos de la sucursal a editar
        /// </summary>
        private DtoSucursal _sucursal;


        /// <summary>
        /// Objeto que posee las propiedades del presentador de la vista
        /// </summary>
        private PresentadorAgregarSucursal _presentador;

        #endregion

        #region Constructores
        
        /// <summary>
        /// Constructor de la clase cuando se desea utilizar la vista para agregra una nueva sucursal
        /// </summary>
        public AgregarSucursal()
        {
            InitializeComponent();
            _presentador = new PresentadorAgregarSucursal(this);
        }


        /// <summary>
        /// Constructor de la clase cuando se desea utilizar la vista para editar los datos de una sucursal
        /// </summary>
        /// <param name="sucursal"></param>
        public AgregarSucursal(DtoSucursal sucursal)
        {
            InitializeComponent();
            _sucursal = sucursal;
            _presentador= new PresentadorAgregarSucursal(this);
        }

        #endregion

        #region Eventos

        /// <summary> Evento que se ejecuta cuando se da click al boton de aceptar </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void OkButtonClick(object sender, RoutedEventArgs e)
        {
            if (_presentador.ValidarControles()) 
                CerrarChildWindow();
        }


        /// <summary> Evento que se ejecuta cuando se da click al boton cancelar </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void CancelButtonClick(object sender, RoutedEventArgs e)
        {
            DialogResult = false;
        }


        /// <summary> Metodo que se ejecuta cuando ya se cierra la ventana </summary>
        public void CerrarChildWindow()
        {
            if (AceptarClicked != null)
                AceptarClicked(this, new EventArgs());

            DialogResult = true;
        }


        /// <summary> Metodo que se ejecuta cuando se selecciona un estado </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void CbCiudadDropDownClosed(object sender, EventArgs e)
        {
            _presentador.CargarCiudad();
        }

        #endregion

        #region Propiedades

        /// <summary>
        /// Propiedad que retorna el valor del combobox que lista los tipos de aseguradoras
        /// </summary>
        public ComboBox TipoAseguradora
        {
            get { return cbTipoSucursal; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del combo donde se listaran los estados
        /// </summary>
        public ComboBox Estados
        {
            get { return cbEstado; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del combo donde se listaran las ciudades
        /// </summary>
        public ComboBox Ciudades
        {
            get { return cbCiudad; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del textbox que indicara la urbanizacion
        /// </summary>
        public TextBox Urbanizacion
        {
            get { return tbUrbanizacion; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del textbox que indicara la calle
        /// </summary>
        public TextBox Calle
        {
            get { return tbCalle; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del textbox que indicara el nombre del edificio o casa
        /// </summary>
        public TextBox Edificio
        {
            get { return tbEdificio; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del textbox que indicara el piso
        /// </summary>
        public TextBox Piso
        {
            get { return tbPiso; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del textbox que indicara el apartamento
        /// </summary>
        public TextBox Apartamento
        {
            get { return tbApto; }
        }


        /// <summary>
        ///Propiedad que devuelve el valor del codigo de area del telefono principal 
        /// </summary>
        public TextBox CodigoAreaTelefonoPrincipal
        {
            get { return tbCodigoAreaTelefono1; }
        }


        /// <summary>
        ///Propiedad que devuelve el valor del codigo de area del telefono secundario 
        /// </summary>
        public TextBox CodigoAreaTelefonoSecundario
        {
            get { return tbCodigoAreaTelefono2; }
        }


        /// <summary>
        ///Propiedad que devuelve el numero del telefono principal 
        /// </summary>
        public TextBox NumeroTelefonoPrincipal
        {
            get { return tbNumeroTelefono1; }
        }


        /// <summary>
        ///Propiedad que devuelve el numero del telefono secundario 
        /// </summary>
        public TextBox NumeroTelefonoSecundario
        {
            get { return tbNumeroTelefono2; }
        }

        
        /// <summary>
        /// Objeto que posee la informacion de la sucursal a editar
        /// </summary>
        public DtoSucursal Sucursal
        {
            get { return _sucursal; }
            set { _sucursal = value; }
        }


        /// <summary> string para mostrar el mensaje de error </summary>
        /// <param name="mensaje"> mensaje del error</param>
        /// <param name="titulo"> titulo de la venta emergente</param>
        public void MensajeError(string mensaje, string titulo)
        {
            ErrorWindow error = new ErrorWindow(mensaje,titulo);
            error.Show();
        }


        #endregion

    }
}

